Open In Colab

Back in black#

\[ \newcommand{\eg}{{\it e.g.}} \newcommand{\ie}{{\it i.e.}} \newcommand{\argmin}{\operatornamewithlimits{argmin}} \newcommand{\mc}{\mathcal} \newcommand{\mb}{\mathbb} \newcommand{\mf}{\mathbf} \newcommand{\minimize}{{\text{minimize}}} \newcommand{\diag}{{\text{diag}}} \newcommand{\cond}{{\text{cond}}} \newcommand{\rank}{{\text{rank }}} \newcommand{\range}{{\mathcal{R}}} \newcommand{\null}{{\mathcal{N}}} \newcommand{\tr}{{\text{trace}}} \newcommand{\dom}{{\text{dom}}} \newcommand{\dist}{{\text{dist}}} \newcommand{\R}{\mathbf{R}} \newcommand{\C}{\mathbf{C}} \newcommand{\SM}{\mathbf{S}} \newcommand{\ball}{\mathcal{B}} \newcommand{\bmat}[1]{\begin{bmatrix}#1\end{bmatrix}} \]

ASE3001: Computational Experiments for Aerospace Engineering, Inha University.
Jong-Han Kim (jonghank@inha.ac.kr)

  • 사운드 샘플(.wav 파일)을 로드한다

  • 음원이 어떤 음표(또는 코드)로 구성되어 있는지 확인한다.
    : 주파수-음표 매칭 표는 구글 검색 등을 통해 찾을 수 있다.
    https://en.wikipedia.org/wiki/Piano_key_frequencies

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
from IPython.display import Audio
  • wav file을 불러온다.

  • 시간에 따른 음성 신호를 도시하고 sound clip을 재생한다.

  • 불러온 데이터는 data[0] : samplling rate과 data[1] : time-series signal로 구성된다.

  • requests 모듈이 import 되지 않는다면 셀에서 다음을 실행한다.
    ! pip install requests

import requests

#URL로 부터 파일 받기 from https://jonghank.github.io/ase3001/files/back_in_black.wav
response = requests.get('https://jonghank.github.io/ase3001/files/back_in_black.wav')

local_file_path = './test.wav'
if response.status_code == 200:
    with open(local_file_path, 'wb') as file:
        file.write(response.content)
    print("Download success")
else:
    print("Download fail")


data = wavfile.read('./test.wav')

framerate = data[0]
sounddata = data[1]
t = np.arange(0,len(sounddata))/framerate

plt.figure(figsize=(12,4), dpi=100)
plt.plot(t,sounddata[:,0], label='Right channel')
plt.plot(t,sounddata[:,1], label='Left channel')
plt.xlabel(r'$t$')
plt.title('Stereo signal')
plt.legend()
plt.show()


Audio([sounddata[:,1], sounddata[:,0]], rate=framerate, autoplay=True)
Download success
../_images/4de5f45ec0e1571bab0b1613bbe4293c14ea0ddfb8cb912a588196450da90da6.png
  • Right channel과 left channel로 구성된 데이터를 더해서 mono data 형성

# sounddata: right channel과 left channel로 구성
# right channel과 left channel 더하기
mono = sounddata@[1,1]

plt.figure(figsize=(12,4), dpi=100)
plt.plot(t, mono)
plt.xlabel(r'$t$')
plt.title('Mono signal')
plt.show()

Audio(mono, rate=framerate, autoplay=True)
../_images/4b028d388be6af7a7e13a131fa7e48680954fc6b716f5b05488fe29466fc509b.png
  • 시간 구간 \(0.1\le t \le 0.5\)의 데이터를 추출하고 새로운 시계열 데이터 \(x_1(t)\)을 생성하시오.

  • 푸리에 변환을 이용하여 지배적인 5개의 주파수와 그에 해당하는 음을 추출하고, 그 음들이 어떤 화음을 만드는지 확인하시오 [ by   np.fft() ] .

 # your code here
  • 시간 구간 \(1.05\le t \le 1.4\)의 데이터를 추출하고 새로운 시계열 데이터 \(x_2(t)\)을 생성하시오.

  • 푸리에 변환을 이용하여 지배적인 5개의 주파수와 그에 해당하는 음을 추출하고 그 음들이 어떤 화음을 만드는지 확인하시오 [ by   np.fft() ] .

 # your code here